#include<iostream>
#include<string>
#include<vector>
#include<map>
using namespace std;
//可以按照函数的方式进行调用的对象，陈为可调用对象  书同文车同轨
//可调用对象分为以下几类 
//1.是一个函数指针
//2.是一个重载可（）的类对象
//3.是一个可以转化为函数指针的类对象
//4.是一个类成员的函数指针或者类成员指针
//1.普通函数
void func(int num ,string name)
{
    cout << "id:" << num << ",name:" << name << endl;
}//建普通函数抽象成函数指针
using funcptr = void (*)(int, string);//void(*)代表一个函数 funcptr即为一种可调用对象
//重载（）的类对象
class Test
{
    public:
        //重载（）
        void operator()(string msg)
        {
            cout << "仿函数：" << msg << endl;
        }
        void hello(int a, string s)//非静态方法属于对象
        {
            cout << "number: " << a << ",name:"s << endl;
        }
        static void world(int a ,string s)//静态方法属于类
        {
            cout << "number: " << a << ", name:" << s << endl;
        }
        //可被转化为函数指针的类对象
        //将类对象转化为函数指针
        operator funcptr ()
        {
            return world;//返回函数地址
        }
};
int main()
{
    Test t;
    t("我是要成为海贼王的男人！ ");
    Test tt;
    tt(19,"luffy");//把tt对象转化为了函数指针

    return 0;
}